#include "common.h"

int getInt(char *msg, int min, int max)
{
	int value = -1;
	
	do {
		if (msg != NULL)
			printf("%s", msg);
		scanf(" %d", &value);
	} while (value < min || value > max);
	
	return value;
}

void alocaMatriz(char ***m, int x, int y)
{
	int i = 0, j = 0;
	
	*m = (char **) malloc(sizeof(char *) * y);
	
	for (i = 0; i < y; i++)
	{
		(*m)[i] = (char *) malloc(sizeof(char) * x);
		for (j = 0; j < x; j++)
			(*m)[i][j] = ' ';
	}
	
}

void liberaMatriz(char ***m, int y)
{
	int i = 0;
	
	for (i = 0; i < y; i++)
		free((*m)[i]);
	free(*m);
	
	*m = NULL;
}

void geraMatriz(char **m, int x, int y)
{
	int r = 0, i = 0, j = 0;
	
	srand(time(NULL));
	
	for (i = 0; i < y; i++)
		for (j = 0; j < x; j++)
		{
			r = rand() % 100;
			if (r < PORCENTAGEM)
				m[i][j] = TAB_NOMARK;
			else
				m[i][j] = TAB_MARK;
		}
}

void leMatriz(char **m, int x, int y)
{
}

void imprimeMatriz(char **m, int x, int y)
{
	int i = 0, j = 0;
	
	for (i = 0; i < y; i++)
	{
		for (j = 0; j < x; j++)
		{
			mvprintw(i,j,"%c", m[i][j]);
		}
	}
	refresh();
}

void alocaTabuleiro(p_parteTabuleiro *t, int *x, int *y, int *wait)
{
	int aleatorio = 0;
	
	*t = (p_parteTabuleiro) malloc(sizeof(t_parteTabuleiro));
	(*t)->tabuleiro = (char ***) malloc(sizeof(char **) * 2);			/* Cria 2 tabuleiros, para buffer */
	
	printf("Digite as dimensoes do tabuleiro:\n");
	*x = getInt("Largura (maximo 80): ", 1, LARGURA_MAX); 
	*y = getInt("Altura (maximo 24): ", 1, ALTURA_MAX);
	alocaMatriz(&((*t)->tabuleiro[0]), *x, *y);
	alocaMatriz(&((*t)->tabuleiro[1]), *x, *y);
	(*t)->matriz_ger_atual = 0;
	
	aleatorio = 1;
	
	*wait = getInt("Esperar entrada do usuario para atualizar?\n0: Nao\n1: Sim\n", 0, 1);
	
	if (aleatorio)
	{
		geraMatriz((*t)->tabuleiro[0], *x, *y);
		(*t)->x = 0;
		(*t)->y = 0;
		(*t)->size_x = *x;
		(*t)->size_y = *y;
	}
	else
	{
		leMatriz((*t)->tabuleiro[0], *x, *y);
	}
	
}

void liberaTabuleiro(p_parteTabuleiro *t, int y)
{
	liberaMatriz(&((*t)->tabuleiro[0]), y);
	liberaMatriz(&((*t)->tabuleiro[1]), y);
	free((*t)->tabuleiro);
	free(*t);
	*t = NULL;
}